Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct Student {
- char name[50];
- int reg;
- double cgpa;
- int semester;
- int year;
- int isRegular; // irregular = 0, regular = 1
- struct Student* next;
- };
- struct Student* head = NULL;
- void addNewStudent(const char* Name, int reg_no, double gpa, int sem, int years, int reg) {
- struct Student* ptr = (struct Student*)malloc(sizeof(struct Student));
- if (ptr == NULL) {
- printf("Memory allocation failed\n");
- exit(1);
- }
- strcpy(ptr->name, Name);
- ptr->reg = reg_no;
- ptr->cgpa = gpa;
- ptr->semester = sem;
- ptr->year = years;
- ptr->isRegular = reg;
- ptr->next = NULL;
- if (head == NULL || head->cgpa < ptr->cgpa) {
- ptr->next = head;
- head = ptr;
- } else {
- struct Student* temp = head;
- while (temp->next != NULL && ptr->cgpa < temp->next->cgpa) {
- temp = temp->next;
- }
- ptr->next = temp->next;
- temp->next = ptr;
- }
- printf("New Student is Added - %s\n", ptr->name);
- }
- void delStudent(int reg_no) {
- struct Student* temp = head;
- struct Student* prev = NULL;
- while (temp != NULL) {
- if (temp->reg == reg_no) {
- if (prev == NULL) { // Deleting head node
- head = temp->next;
- } else {
- prev->next = temp->next;
- }
- printf("Student Record is Removed - %s\n", temp->name);
- free(temp);
- return;
- }
- prev = temp;
- temp = temp->next;
- }
- printf("Student Record with reg number %d not found\n", reg_no);
- }
- void displayAllStudent() {
- struct Student* p = head;
- while (p != NULL) {
- printf("%d_%s_%.2f_%d-%d_", p->reg, p->name, p->cgpa, p->year, p->semester);
- if (p->isRegular)
- printf("Regular\n");
- else
- printf("Irregular\n");
- p = p->next;
- }
- }
- struct Student* awardStack = NULL;
- void pushAwardee(struct Student* student) {
- struct Student* newAwardee = (struct Student*)malloc(sizeof(struct Student));
- if (newAwardee == NULL) {
- printf("Memory allocation failed\n");
- exit(1);
- }
- *newAwardee = *student;
- newAwardee->next = awardStack;
- awardStack = newAwardee;
- printf("Selected Awardee Enlisted - %s\n", student->name);
- }
- void popAwardee() {
- if (awardStack == NULL) {
- printf("No awardee to remove\n");
- return;
- }
- struct Student* temp = awardStack;
- awardStack = awardStack->next;
- printf("Awardee Removed - %s\n", temp->name);
- free(temp);
- }
- void displayAllAwardee() {
- struct Student* temp = awardStack;
- while (temp != NULL) {
- printf("%d_%s_%.2f_%d-%d_", temp->reg, temp->name, temp->cgpa, temp->year, temp->semester);
- if (temp->isRegular)
- printf("Regular\n");
- else
- printf("Irregular\n");
- temp = temp->next;
- }
- }
- struct Student* findStudentByName(const char* name) {
- struct Student* p = head;
- while (p != NULL) {
- if (strcmp(p->name, name) == 0) {
- return p;
- }
- p = p->next;
- }
- return NULL;
- }
- // Circular queue for tokens
- struct TokenQueue {
- struct Student* student;
- struct TokenQueue* next;
- };
- struct TokenQueue* front = NULL;
- struct TokenQueue* rear = NULL;
- void newToken(struct Student* student) {
- struct TokenQueue* newTokenNode = (struct TokenQueue*)malloc(sizeof(struct TokenQueue));
- if (newTokenNode == NULL) {
- printf("Memory allocation failed\n");
- exit(1);
- }
- newTokenNode->student = student;
- if (front == NULL) {
- front = rear = newTokenNode;
- newTokenNode->next = front;
- } else {
- rear->next = newTokenNode;
- rear = newTokenNode;
- rear->next = front;
- }
- printf("New Token Created - %s\n", student->name);
- }
- void serveToken() {
- if (front == NULL) {
- printf("No tokens to serve\n");
- return;
- }
- struct TokenQueue* temp = front;
- if (front == rear) {
- front = rear = NULL;
- } else {
- front = front->next;
- rear->next = front;
- }
- printf("Token Served - %s\n", temp->student->name);
- free(temp);
- }
- void displayQueue() {
- if (front == NULL) {
- printf("Queue is empty\n");
- return;
- }
- struct TokenQueue* temp = front;
- do {
- printf("%d_%s_%.2f_%d-%d_", temp->student->reg, temp->student->name, temp->student->cgpa, temp->student->year, temp->student->semester);
- if (temp->student->isRegular)
- printf("Regular\n");
- else
- printf("Irregular\n");
- temp = temp->next;
- } while (temp != front);
- }
- int main() {
- addNewStudent("Monica", 22201999, 3.50, 1, 2, 1);
- addNewStudent("Ross", 22201000, 3.92, 1, 2, 1);
- addNewStudent("Chandler", 18201000, 4.0, 1, 3, 1);
- addNewStudent("Janice", 21201089, 2.52, 1, 2, 0);
- addNewStudent("Joey", 20201979, 2.88, 1, 2, 0);
- addNewStudent("Gunther", 19201000, 4.0, 2, 3, 0);
- printf("\n");
- delStudent(21201089);
- printf("\n");
- displayAllStudent();
- printf("\n");
- // Push "Monica", "Ross", and "Chandler" to the awardee stack
- struct Student* student;
- student = findStudentByName("Monica");
- if (student != NULL) pushAwardee(student);
- student = findStudentByName("Ross");
- if (student != NULL) pushAwardee(student);
- student = findStudentByName("Chandler");
- if (student != NULL) pushAwardee(student);
- printf("\nAll Awardees:\n");
- displayAllAwardee();
- printf("\n");
- // Adding tokens for food distribution
- student = findStudentByName("Monica");
- if (student != NULL) newToken(student);
- student = findStudentByName("Ross");
- if (student != NULL) newToken(student);
- student = findStudentByName("Chandler");
- if (student != NULL) newToken(student);
- student = findStudentByName("Gunther");
- if (student != NULL) newToken(student);
- student = findStudentByName("Joey");
- if (student != NULL) newToken(student);
- printf("\nQueue Display:\n");
- displayQueue();
- printf("\n");
- // Serving tokens
- serveToken();
- serveToken();
- printf("\nQueue Display after serving two tokens:\n");
- displayQueue();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement